grid布局

吴龙淼 写于 2022-01-07

Flex 布局是轴线布局,只能指定”项目”针对轴线的位置,可以看作是一维布局。Grid 布局则是将容器划分成”行”和”列”,产生单元格,然后指定”项目所在”的单元格,可以看作是二维布局。Grid 布局远比 Flex 布局强大。

与flex布局一样,采用grid布局的Dom称为容器,容器内部的直接子元素称为项目item

容器里水平区域称为行,垂直区域称为列,行列的交叉区域称为单元格(table类似)

容器属性

display:grid

grid: grid-template || auto-flow (dense) (grid-auto-rows) / grid-template-columns || grid-template-rows / auto-flow (dense) (grid-auto-columns)

grid-template-columns:  规定每一列的列宽,项目宽度,定义后必须一一指定
grid-template-rows:  规定每一行的行高,项目高度

    repeat(6,100px 500px) 重复模板
    auto-fill 在项目大小确定,但是容器宽高可变时使用,替代repeat第一个参数

    fr 相对大小,与flex shink grow类似
    minmax(min,max) 规定最大最小值
    min-content 按最小内容创建
    max-content 按最大内容创建
    fit-content == minmax(auto, max-content) 适应内容
    auto 自动计算

row-gap:设置行间隔,不必一一指定每个间隔
column-gap:设置行间隔,不必一一指定每个间隔
gap: row-gap column-gap

grid-template-areas: 'a b c'
                    'd e f'
                    'g h i'

grid-auto-flow:项目排列顺序,默认先行后列row,先列后行column

justify-items: start | end | center | (stretch)(默认值)  设置所有项目位置
align-items: start | end | center | (stretch)
place-items: align-items justify-items

justify-content: start | end | center | (stretch) | space-around | space-between | space-evenly 设置整个容器位置
align-content: start | end | center | (stretch) | space-around | space-between | space-evenly
place-content: align-content justify-content

grid-auto-columns grid-auto-rows: min-content | max-content | auto | num(自定义) | minmax

项目属性

设置项目起始网格位置
grid-column         start / end
    grid-column-start属性: 开始的垂直网格线
    grid-column-end属性: 结束的垂直网格线
grid-row            start / end
    grid-row-start属性:开始的水平网格线
    grid-row-end属性:结束的水平网格线

span 表示跨越的网格线数量
例子:grid-column-start: span 2

grid-area: d 指定项目放在某个单元格,与容器属性配合使用 | <row-start> / <column-start> / <row-end> / <column-end> 指定项目位置
(grid-template-areas: 'a b c'
                     '[d] e f'
                     'g h i')

justify-self: start | end | center | (stretch) 设置单个项目水平位置
align-self: start | end | center | (stretch) 设置单个项目垂直位置
place-self: align-self justify-self